!function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var r=this._onceEvents&&this._onceEvents[t];o;){var s=r&&r[o];s&&(this.off(t,o),delete r[o]),o.apply(this,e),n+=s?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}(window,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;ie;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!c){c=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s.isBoxSizeOuter=r=200==t(o.width),i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var c=a.isBorderBox="border-box"==s.boxSizing,d=0;u>d;d++){var f=h[d],l=s[f],p=parseFloat(l);a[f]=isNaN(p)?0:p}var g=a.paddingLeft+a.paddingRight,m=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,x=a.borderTopWidth+a.borderBottomWidth,b=c&&r,E=t(s.width);E!==!1&&(a.width=E+(b?0:g+_));var T=t(s.height);return T!==!1&&(a.height=T+(b?0:m+x)),a.innerWidth=a.width-(g+_),a.innerHeight=a.height-(m+x),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,c=!1;return s}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];o;){var r=s&&s[o];r&&(this.off(t,o),delete s[o]),o.apply(this,e),n+=r?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i=t.x+e&&this.y+this.height>=t.y+i},e.overlaps=function(t){var e=this.x+this.width,i=this.y+this.height,n=t.x+t.width,o=t.y+t.height;return this.xt.x&&this.yt.y},e.getMaximalFreeRects=function(e){if(!this.overlaps(e))return!1;var i,n=[],o=this.x+this.width,s=this.y+this.height,r=e.x+e.width,a=e.y+e.height;return this.yr&&(i=new t({x:r,y:this.y,width:o-r,height:this.height}),n.push(i)),s>a&&(i=new t({x:this.x,y:a,width:this.width,height:s-a}),n.push(i)),this.x=t.width&&this.height>=t.height},t}),function(t,e){if("function"==typeof define&&define.amd)define("packery/js/packer",["./rect"],e);else if("object"==typeof module&&module.exports)module.exports=e(require("./rect"));else{var i=t.Packery=t.Packery||{};i.Packer=e(i.Rect)}}(window,function(t){"use strict";function e(t,e,i){this.width=t||0,this.height=e||0,this.sortDirection=i||"downwardLeftToRight",this.reset()}var i=e.prototype;i.reset=function(){this.spaces=[];var e=new t({x:0,y:0,width:this.width,height:this.height});this.spaces.push(e),this.sorter=n[this.sortDirection]||n.downwardLeftToRight},i.pack=function(t){for(var e=0;e=t.x+t.width&&i.height>=t.height-.01;if(n){t.y=i.y,this.placed(t);break}}},i.rowPack=function(t){for(var e=0;e=t.y+t.height&&i.width>=t.width-.01;if(n){t.x=i.x,this.placed(t);break}}},i.placeInSpace=function(t,e){t.x=e.x,t.y=e.y,this.placed(t)},i.placed=function(t){for(var e=[],i=0;ii&&1>n;return o?void this.goTo(t,e):void a.apply(this,arguments)},s.enablePlacing=function(){this.removeTransitionStyles(),this.isTransitioning&&n&&(this.element.style[n]="none"),this.isTransitioning=!1,this.getSize(),this.layout._setRectSize(this.element,this.rect),this.isPlacing=!0},s.disablePlacing=function(){this.isPlacing=!1},s.removeElem=function(){this.element.parentNode.removeChild(this.element),this.layout.packer.addSpace(this.rect),this.emitEvent("remove",[this])},s.showDropPlaceholder=function(){var t=this.dropPlaceholder;t||(t=this.dropPlaceholder=document.createElement("div"),t.className="packery-drop-placeholder",t.style.position="absolute"),t.style.width=this.size.width+"px",t.style.height=this.size.height+"px",this.positionDropPlaceholder(),this.layout.element.appendChild(t)},s.positionDropPlaceholder=function(){this.dropPlaceholder.style[n]="translate("+this.rect.x+"px, "+this.rect.y+"px)"},s.hideDropPlaceholder=function(){var t=this.dropPlaceholder.parentNode;t&&t.removeChild(this.dropPlaceholder)},o}),function(t,e){"function"==typeof define&&define.amd?define(["get-size/get-size","outlayer/outlayer","packery/js/rect","packery/js/packer","packery/js/item"],e):"object"==typeof module&&module.exports?module.exports=e(require("get-size"),require("outlayer"),require("./rect"),require("./packer"),require("./item")):t.Packery=e(t.getSize,t.Outlayer,t.Packery.Rect,t.Packery.Packer,t.Packery.Item)}(window,function(t,e,i,n,o){"use strict";function s(t,e){return t.position.y-e.position.y||t.position.x-e.position.x}function r(t,e){return t.position.x-e.position.x||t.position.y-e.position.y}function a(t,e){var i=e.x-t.x,n=e.y-t.y;return Math.sqrt(i*i+n*n)}i.prototype.canFit=function(t){return this.width>=t.width-1&&this.height>=t.height-1};var h=e.create("packery");h.Item=o;var u=h.prototype;u._create=function(){e.prototype._create.call(this),this.packer=new n,this.shiftPacker=new n,this.isEnabled=!0,this.dragItemCount=0;var t=this;this.handleDraggabilly={dragStart:function(){t.itemDragStart(this.element)},dragMove:function(){t.itemDragMove(this.element,this.position.x,this.position.y)},dragEnd:function(){t.itemDragEnd(this.element)}},this.handleUIDraggable={start:function(e,i){i&&t.itemDragStart(e.currentTarget)},drag:function(e,i){i&&t.itemDragMove(e.currentTarget,i.position.left,i.position.top)},stop:function(e,i){i&&t.itemDragEnd(e.currentTarget)}}},u._resetLayout=function(){this.getSize(),this._getMeasurements();var t,e,i;this._getOption("horizontal")?(t=1/0,e=this.size.innerHeight+this.gutter,i="rightwardTopToBottom"):(t=this.size.innerWidth+this.gutter,e=1/0,i="downwardLeftToRight"),this.packer.width=this.shiftPacker.width=t,this.packer.height=this.shiftPacker.height=e,this.packer.sortDirection=this.shiftPacker.sortDirection=i,this.packer.reset(),this.maxY=0,this.maxX=0},u._getMeasurements=function(){this._getMeasurement("columnWidth","width"),this._getMeasurement("rowHeight","height"),this._getMeasurement("gutter","width")},u._getItemLayoutPosition=function(t){if(this._setRectSize(t.element,t.rect),this.isShifting||this.dragItemCount>0){var e=this._getPackMethod();this.packer[e](t.rect)}else this.packer.pack(t.rect);return this._setMaxXY(t.rect),t.rect},u.shiftLayout=function(){this.isShifting=!0,this.layout(),delete this.isShifting},u._getPackMethod=function(){return this._getOption("horizontal")?"rowPack":"columnPack"},u._setMaxXY=function(t){this.maxX=Math.max(t.x+t.width,this.maxX),this.maxY=Math.max(t.y+t.height,this.maxY)},u._setRectSize=function(e,i){var n=t(e),o=n.outerWidth,s=n.outerHeight;(o||s)&&(o=this._applyGridGutter(o,this.columnWidth),s=this._applyGridGutter(s,this.rowHeight)),i.width=Math.min(o,this.packer.width),i.height=Math.min(s,this.packer.height)},u._applyGridGutter=function(t,e){if(!e)return t+this.gutter;e+=this.gutter;var i=t%e,n=i&&1>i?"round":"ceil";return t=Math[n](t/e)*e},u._getContainerSize=function(){return this._getOption("horizontal")?{width:this.maxX-this.gutter}:{height:this.maxY-this.gutter}},u._manageStamp=function(t){var e,n=this.getItem(t);if(n&&n.isPlacing)e=n.rect;else{var o=this._getElementOffset(t);e=new i({x:this._getOption("originLeft")?o.left:o.right,y:this._getOption("originTop")?o.top:o.bottom})}this._setRectSize(t,e),this.packer.placed(e),this._setMaxXY(e)},u.sortItemsByPosition=function(){var t=this._getOption("horizontal")?r:s;this.items.sort(t)},u.fit=function(t,e,i){var n=this.getItem(t);n&&(this.stamp(n.element),n.enablePlacing(),this.updateShiftTargets(n),e=void 0===e?n.rect.x:e,i=void 0===i?n.rect.y:i,this.shift(n,e,i),this._bindFitEvents(n),n.moveTo(n.rect.x,n.rect.y),this.shiftLayout(),this.unstamp(n.element),this.sortItemsByPosition(),n.disablePlacing())},u._bindFitEvents=function(t){function e(){n++,2==n&&i.dispatchEvent("fitComplete",null,[t])}var i=this,n=0;t.once("layout",e),this.once("layoutComplete",e)},u.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&(this.options.shiftPercentResize?this.resizeShiftPercentLayout():this.layout())},u.needsResizeLayout=function(){var e=t(this.element),i=this._getOption("horizontal")?"innerHeight":"innerWidth";return e[i]!=this.size[i]},u.resizeShiftPercentLayout=function(){var e=this._getItemsForLayout(this.items),i=this._getOption("horizontal"),n=i?"y":"x",o=i?"height":"width",s=i?"rowHeight":"columnWidth",r=i?"innerHeight":"innerWidth",a=this[s];if(a=a&&a+this.gutter){this._getMeasurements();var h=this[s]+this.gutter;e.forEach(function(t){var e=Math.round(t.rect[n]/a);t.rect[n]=e*h})}else{var u=t(this.element)[r]+this.gutter,c=this.packer[o];e.forEach(function(t){t.rect[n]=t.rect[n]/c*u})}this.shiftLayout()},u.itemDragStart=function(t){if(this.isEnabled){this.stamp(t);var e=this.getItem(t);e&&(e.enablePlacing(),e.showDropPlaceholder(),this.dragItemCount++,this.updateShiftTargets(e))}},u.updateShiftTargets=function(t){this.shiftPacker.reset(),this._getBoundingRect();var e=this._getOption("originLeft"),n=this._getOption("originTop");this.stamps.forEach(function(t){var o=this.getItem(t);if(!o||!o.isPlacing){var s=this._getElementOffset(t),r=new i({x:e?s.left:s.right,y:n?s.top:s.bottom});this._setRectSize(t,r),this.shiftPacker.placed(r)}},this);var o=this._getOption("horizontal"),s=o?"rowHeight":"columnWidth",r=o?"height":"width";this.shiftTargetKeys=[],this.shiftTargets=[];var a,h=this[s];if(h=h&&h+this.gutter){var u=Math.ceil(t.rect[r]/h),c=Math.floor((this.shiftPacker[r]+this.gutter)/h);a=(c-u)*h;for(var d=0;c>d;d++){var f=o?0:d*h,l=o?d*h:0;this._addShiftTarget(f,l,a)}}else a=this.shiftPacker[r]+this.gutter-t.rect[r],this._addShiftTarget(0,0,a);var p=this._getItemsForLayout(this.items),g=this._getPackMethod();p.forEach(function(t){var e=t.rect;this._setRectSize(t.element,e),this.shiftPacker[g](e),this._addShiftTarget(e.x,e.y,a);var i=o?e.x+e.width:e.x,n=o?e.y:e.y+e.height;if(this._addShiftTarget(i,n,a),h)for(var s=Math.round(e[r]/h),u=1;s>u;u++){var c=o?i:e.x+h*u,d=o?e.y+h*u:n;this._addShiftTarget(c,d,a)}},this)},u._addShiftTarget=function(t,e,i){var n=this._getOption("horizontal")?e:t;if(!(0!==n&&n>i)){var o=t+","+e,s=-1!=this.shiftTargetKeys.indexOf(o);s||(this.shiftTargetKeys.push(o),this.shiftTargets.push({x:t,y:e}))}},u.shift=function(t,e,i){var n,o=1/0,s={x:e,y:i};this.shiftTargets.forEach(function(t){var e=a(t,s);o>e&&(n=t,o=e)}),t.rect.x=n.x,t.rect.y=n.y};var c=120;u.itemDragMove=function(t,e,i){ function n(){s.shift(o,e,i),o.positionDropPlaceholder(),s.layout()}var o=this.isEnabled&&this.getItem(t);if(o){e-=this.size.paddingLeft,i-=this.size.paddingTop;var s=this,r=new Date;this._itemDragTime&&r-this._itemDragTime0)c?e+=r+s:e-=i+k+l+m;else{e=h[b];if(e<0||e===null)e=a.style[b]||0;e=parseFloat(e)||0,c&&(e+=i+k+r+s+l+m)}return e}function q(b,c,d){b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent&&(b["e"+c+d]=d,b[c+d]=function(){b["e"+c+d](a.event)},b.attachEvent("on"+c,b[c+d]))}function r(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&(a.detachEvent("on"+b,a[b+c]),a[b+c]=null,a["e"+b+c]=null)}function s(a,b){if(!a)return;this.element=a,this.options={};for(var c in s.defaults)this.options[c]=s.defaults[c];for(c in b)this.options[c]=b[c];this._create(),this.build()}"use strict";var c=a.document,d="classList"in c.createElement("div"),f=d?function(a,b){return a.classList.contains(b)}:function(a,b){return e(b).test(a.className)},g=d?function(a,b){a.classList.add(b)}:function(a,b){f(a,b)||(a.className=a.className+" "+b)},h=d?function(a,b){a.classList.remove(b)}:function(a,b){a.className=a.className.replace(e(b)," ")},i=c.defaultView,j=i&&i.getComputedStyle?function(a){return i.getComputedStyle(a,null)}:function(a){return a.currentStyle},k=c.getElementsByTagName("body")[0],l=c.createElement("div"),m=k||c.createElement("body");l.style.marginTop="1%",m.appendChild(l);var n=j(l).marginTop!=="1%";m.removeChild(l);var t=["position","height"];s.defaults={isResizable:!0,gutterWidth:0,isRTL:!1,isFitWidth:!1},s.prototype={_getBricks:function(a){var b;for(var c=0,d=a.length;c 0) fire=false; });*/ if(fire&&options.callback){ options.callback(); }} var Utility={ request: function(url, callback){ $.ajax({ url: url, dataType: 'jsonp', success: callback }); }, get_request: function(url, callback){ $.get(url, callback, 'json'); }, wrapLinks: function(string, social_network){ var exp=/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; if(social_network==='google-plus'){ string=string.replace(/(@|#)([a-z0-9_]+['])/ig, Utility.wrapGoogleplusTagTemplate); }else{ string=string.replace(exp, Utility.wrapLinkTemplate); } return string; }, wrapLinkTemplate: function(string){ return '' + string + '<\/a>'; }, wrapGoogleplusTagTemplate: function(string){ return '' + string + '<\/a>'; }, shorten: function(string){ string=$.trim(string); if(string.length > options.length){ return jQuery.trim(string).substring(0, options.length).split(" ").slice(0, -1).join(" ") + "..."; }else{ return string; }}, stripHTML: function(string){ if(typeof string==="undefined"||string===null){ return ''; } return string.replace(/(<([^>]+)>)|nbsp;|\s{2,}|/ig, ""); }}; function SocialFeedPost(social_network, data){ this.content=data; this.content.social_network=social_network; this.content.attachment=(this.content.attachment===undefined) ? '':this.content.attachment; this.content.time_ago=data.dt_create.fromNow(); this.content.date=data.dt_create.format(options.date_format); this.content.dt_create=this.content.dt_create.valueOf(); this.content.text=Utility.wrapLinks(Utility.shorten(data.message + ' ' + data.description), data.social_network); this.content.moderation_passed=(options.moderation) ? options.moderation(this.content):true; Feed[social_network].posts.push(this); } SocialFeedPost.prototype={ render: function(){ var rendered_html=Feed.template(this.content); var data=this.content; if($(container).children('[social-feed-id=' + data.id + ']').length!==0){ return false; } if($(container).children().length===0){ $(container).append(rendered_html); }else{ var i=0, insert_index=-1; $.each($(container).children(), function(){ if($(this).attr('dt-create') < data.dt_create){ insert_index=i; return false; } i++; }); $(container).append(rendered_html); if(insert_index >=0){ insert_index++; var before=$(container).children('div:nth-child(' + insert_index + ')'), current=$(container).children('div:last-child'); $(current).insertBefore(before); }} if(options.media_min_width){ var query='[social-feed-id=' + data.id + '] img.attachment'; var image=$(query); var height, width=''; var img=new Image(); var imgSrc=image.attr("src"); $(img).load(function(){ if(img.width < options.media_min_width){ image.hide(); } delete img; }).error(function(){ image.hide(); }).attr({ src: imgSrc }); } loaded_post_count++; if(loaded_post_count==posts_to_load_count){ fireCallback(); }} }; var Feed={ template: false, init: function(){ Feed.getTemplate(function(){ social_networks.forEach(function(network){ if(options[network]){ if(options[network].accounts){ options[network].accounts.forEach(function(account){ Feed[network].getData(account); }); }else if(options[network].urls){ options[network].urls.forEach(function(url){ Feed[network].getData(url); }); }else{ Feed[network].getData(); }} }); }); }, getTemplate: function(callback){ if(Feed.template) return callback(); else { if(options.template_html){ Feed.template=doT.template(options.template_html); return callback(); }else{ $.get(options.template, function(template_html){ Feed.template=doT.template(template_html); return callback(); }); }} }, twitter: { posts: [], loaded: false, api: 'http://api.tweecool.com/', getData: function(account){ var cb=new Codebird(); cb.setConsumerKey(options.twitter.consumer_key, options.twitter.consumer_secret); if(options.twitter.proxy!==undefined){ cb.setProxy(options.twitter.proxy); } switch (account[0]){ case '@': var userid=account.substr(1); cb.__call("statuses_userTimeline", "id=" + userid + "&count=" + options.twitter.limit, Feed.twitter.utility.getPosts, true ); break; case '#': var hashtag=account.substr(1); cb.__call("search_tweets", "q=" + hashtag + "&count=" + options.twitter.limit, function(reply){ Feed.twitter.utility.getPosts(reply.statuses); }, true ); break; default: }}, utility: { getPosts: function(json){ if(json){ $.each(json, function(){ var element=this; var post=new SocialFeedPost('twitter', Feed.twitter.utility.unifyPostData(element)); post.render(); }); }}, unifyPostData: function(element){ var post={}; if(element.id){ post.id=element.id; post.dt_create=moment(new Date(element.created_at)); post.author_link='http://twitter.com/' + element.user.screen_name; post.author_picture=element.user.profile_image_url; post.post_url=post.author_link + '/status/' + element.id_str; post.author_name=element.user.name; post.message=element.text; post.description=''; post.link='http://twitter.com/' + element.user.screen_name + '/status/' + element.id_str; if(options.show_media===true){ if(element.entities.media&&element.entities.media.length > 0){ var image_url=element.entities.media[0].media_url; if(image_url){ post.attachment=''; }} }} return post; }} }, facebook: { posts: [], graph: 'https://graph.facebook.com/', loaded: false, getData: function(account){ var proceed=function(request_url){ Utility.request(request_url, Feed.facebook.utility.getPosts); }; var fields='?fields=id,from,name,message,created_time,story,description,link'; fields +=(options.show_media===true)?',picture,object_id':''; var request_url, limit='&limit=' + options.facebook.limit, query_extention='&access_token=' + options.facebook.access_token + '&callback=?'; switch (account[0]){ case '@': var username=account.substr(1); Feed.facebook.utility.getUserId(username, function(userdata){ if(userdata.id!==''){ request_url=Feed.facebook.graph + 'v2.4/' + userdata.id + '/posts'+ fields + limit + query_extention; proceed(request_url); }}); break; case '!': var page=account.substr(1); request_url=Feed.facebook.graph + 'v2.4/' + page + '/feed'+ fields + limit + query_extention; proceed(request_url); break; default: proceed(request_url); }}, utility: { getUserId: function(username, callback){ var query_extention='&access_token=' + options.facebook.access_token + '&callback=?'; var url='https://graph.facebook.com/' + username + '?' + query_extention; var result=''; $.get(url, callback, 'json'); }, prepareAttachment: function(element){ var image_url=element.picture; if(image_url.indexOf('_b.')!==-1){ }else if(image_url.indexOf('safe_image.php')!==-1){ image_url=Feed.facebook.utility.getExternalImageURL(image_url, 'url'); }else if(image_url.indexOf('app_full_proxy.php')!==-1){ image_url=Feed.facebook.utility.getExternalImageURL(image_url, 'src'); }else if(element.object_id){ image_url=Feed.facebook.graph + element.object_id + '/picture/?type=normal'; } return ''; }, getExternalImageURL: function(image_url, parameter){ image_url=decodeURIComponent(image_url).split(parameter + '=')[1]; if(image_url.indexOf('fbcdn-sphotos')===-1){ return image_url.split('&')[0]; }else{ return image_url; }}, getPosts: function(json){ if(json['data']){ json['data'].forEach(function(element){ var post=new SocialFeedPost('facebook', Feed.facebook.utility.unifyPostData(element)); post.render(); }); }}, unifyPostData: function(element){ var post={}, text=(element.message) ? element.message:element.story; post.id=element.id; post.dt_create=moment(element.created_time); post.author_link='http://facebook.com/' + element.from.id; post.author_picture=Feed.facebook.graph + element.from.id + '/picture'; post.author_name=element.from.name; post.name=element.name||""; post.message=(text) ? text:''; post.description=(element.description) ? element.description:''; post.link=(element.link) ? element.link:'http://facebook.com/' + element.from.id; if(options.show_media===true){ if(element.picture){ var attachment=Feed.facebook.utility.prepareAttachment(element); if(attachment){ post.attachment=attachment; }} } return post; }} }, google: { posts: [], loaded: false, api: 'https://www.googleapis.com/plus/v1/', getData: function(account){ var request_url; switch (account[0]){ case '#': var hashtag=account.substr(1); request_url=Feed.google.api + 'activities?query=' + hashtag + '&key=' + options.google.access_token + '&maxResults=' + options.google.limit; Utility.get_request(request_url, Feed.google.utility.getPosts); break; case '@': var username=account.substr(1); request_url=Feed.google.api + 'people/' + username + '/activities/public?key=' + options.google.access_token + '&maxResults=' + options.google.limit; Utility.get_request(request_url, Feed.google.utility.getPosts); break; default: }}, utility: { getPosts: function(json){ if(json.items){ $.each(json.items, function(i){ var post=new SocialFeedPost('google', Feed.google.utility.unifyPostData(json.items[i])); post.render(); }); }}, unifyPostData: function(element){ var post={}; post.id=element.id; post.attachment=''; post.description=''; post.dt_create=moment(element.published); post.author_link=element.actor.url; post.author_picture=element.actor.image.url; post.author_name=element.actor.displayName; if(options.show_media===true){ if(element.object.attachments){ $.each(element.object.attachments, function(){ var image=''; if(this.fullImage){ image=this.fullImage.url; }else{ if(this.objectType==='album'){ if(this.thumbnails&&this.thumbnails.length > 0){ if(this.thumbnails[0].image){ image=this.thumbnails[0].image.url; }} }} post.attachment=''; }); }} post.message=element.title; post.link=element.url; return post; }} }, instagram: { posts: [], api: 'https://api.instagram.com/v1/', loaded: false, accessType: function(){ if(typeof options.instagram.access_token==='undefined'&&typeof options.instagram.client_id==='undefined'){ console.log('You need to define a client_id or access_token to authenticate with Instagram\'s API.'); return undefined; } if(options.instagram.access_token){ options.instagram.client_id=undefined; } options.instagram.access_type=(typeof options.instagram.client_id==='undefined' ? 'access_token':'client_id'); return options.instagram.access_type; }, getData: function(account){ var url; if(this.accessType()!=='undefined'){ var authTokenParams=options.instagram.access_type + '=' + options.instagram[options.instagram.access_type]; } switch (account[0]){ case '@': var username=account.substr(1); url=Feed.instagram.api + 'users/search/?q=' + username + '&' + authTokenParams + '&count=1' + '&callback=?'; Utility.request(url, Feed.instagram.utility.getUsers); break; case '#': var hashtag=account.substr(1); url=Feed.instagram.api + 'tags/' + hashtag + '/media/recent/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getImages); break; case '&': var id=account.substr(1); url=Feed.instagram.api + 'users/' + id + '/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getUsers); default: }}, utility: { getImages: function(json){ if(json.data){ json.data.forEach(function(element){ var post=new SocialFeedPost('instagram', Feed.instagram.utility.unifyPostData(element)); post.render(); }); }}, getUsers: function(json){ if(options.instagram.access_type!=='undefined'){ var authTokenParams=options.instagram.access_type + '=' + options.instagram[options.instagram.access_type]; } if(!jQuery.isArray(json.data)) json.data=[json.data] json.data.forEach(function(user){ var url=Feed.instagram.api + 'users/' + user.id + '/media/recent/?' + authTokenParams + '&' + 'count=' + options.instagram.limit + '&callback=?'; Utility.request(url, Feed.instagram.utility.getImages); }); }, unifyPostData: function(element){ var post={}; post.id=element.id; post.dt_create=moment(element.created_time * 1000); post.author_link='http://instagram.com/' + element.user.username; post.author_picture=element.user.profile_picture; post.author_name=element.user.full_name||element.user.username; post.message=(element.caption&&element.caption) ? element.caption.text:''; post.description=''; post.link=element.link; if(options.show_media){ post.attachment=''; } return post; }} }, vk: { posts: [], loaded: false, base: 'http://vk.com/', api: 'https://api.vk.com/method/', user_json_template: 'https://api.vk.com/method/' + 'users.get?fields=first_name,%20last_name,%20screen_name,%20photo&uid=', group_json_template: 'https://api.vk.com/method/' + 'groups.getById?fields=first_name,%20last_name,%20screen_name,%20photo&gid=', getData: function(account){ var request_url; switch (account[0]){ case '@': var username=account.substr(1); request_url=Feed.vk.api + 'wall.get?owner_id=' + username + '&filter=' + options.vk.source + '&count=' + options.vk.limit + '&callback=?'; Utility.get_request(request_url, Feed.vk.utility.getPosts); break; case '#': var hashtag=account.substr(1); request_url=Feed.vk.api + 'newsfeed.search?q=' + hashtag + '&count=' + options.vk.limit + '&callback=?'; Utility.get_request(request_url, Feed.vk.utility.getPosts); break; default: }}, utility: { getPosts: function(json){ if(json.response){ $.each(json.response, function(){ if(this!=parseInt(this)&&this.post_type==='post'){ var owner_id=(this.owner_id) ? this.owner_id:this.from_id, vk_wall_owner_url=(owner_id > 0) ? (Feed.vk.user_json_template + owner_id + '&callback=?'):(Feed.vk.group_json_template + (-1) * owner_id + '&callback=?'), element=this; Utility.get_request(vk_wall_owner_url, function(wall_owner){ Feed.vk.utility.unifyPostData(wall_owner, element, json); }); }}); }}, unifyPostData: function(wall_owner, element, json){ var post={}; post.id=element.id; post.dt_create=moment.unix(element.date); post.description=' '; post.message=Utility.stripHTML(element.text); if(options.show_media){ if(element.attachment){ if(element.attachment.type==='link') post.attachment=''; if(element.attachment.type==='video') post.attachment=''; if(element.attachment.type==='photo') post.attachment=''; }} if(element.from_id > 0){ var vk_user_json=Feed.vk.user_json_template + element.from_id + '&callback=?'; Utility.get_request(vk_user_json, function(user_json){ var vk_post=new SocialFeedPost('vk', Feed.vk.utility.getUser(user_json, post, element, json)); vk_post.render(); }); }else{ var vk_group_json=Feed.vk.group_json_template + (-1) * element.from_id + '&callback=?'; Utility.get_request(vk_group_json, function(user_json){ var vk_post=new SocialFeedPost('vk', Feed.vk.utility.getGroup(user_json, post, element, json)); vk_post.render(); }); }}, getUser: function(user_json, post, element, json){ post.author_name=user_json.response[0].first_name + ' ' + user_json.response[0].last_name; post.author_picture=user_json.response[0].photo; post.author_link=Feed.vk.base + user_json.response[0].screen_name; post.link=Feed.vk.base + user_json.response[0].screen_name + '?w=wall' + element.from_id + '_' + element.id; return post; }, getGroup: function(user_json, post, element, json){ post.author_name=user_json.response[0].name; post.author_picture=user_json.response[0].photo; post.author_link=Feed.vk.base + user_json.response[0].screen_name; post.link=Feed.vk.base + user_json.response[0].screen_name + '?w=wall-' + user_json.response[0].gid + '_' + element.id; return post; }} }, blogspot: { loaded: false, getData: function(account){ var url; switch (account[0]){ case '@': var username=account.substr(1); url='http://' + username + '.blogspot.com/feeds/posts/default?alt=json-in-script&callback=?'; request(url, getPosts); break; default: }}, utility: { getPosts: function(json){ $.each(json.feed.entry, function(){ var post={}, element=this; post.id=element.id['$t'].replace(/[^a-z0-9]/gi, ''); post.dt_create=moment((element.published['$t'])); post.author_link=element.author[0]['uri']['$t']; post.author_picture='http:' + element.author[0]['gd$image']['src']; post.author_name=element.author[0]['name']['$t']; post.message=element.title['$t'] + '

' + stripHTML(element.content['$t']); post.description=''; post.link=element.link.pop().href; if(options.show_media){ if(element['media$thumbnail']){ post.attachment=''; }} post.render(); }); }} }, pinterest: { posts: [], loaded: false, apiv1: 'https://api.pinterest.com/v1/', getData: function(account){ var request_url, limit='limit=' + options.pinterest.limit, fields='fields=id,created_at,link,note,creator(url,first_name,last_name,image),image', query_extention=fields + '&access_token=' + options.pinterest.access_token + '&' + limit + '&callback=?'; switch (account[0]){ case '@': var username=account.substr(1); if(username==='me'){ request_url=Feed.pinterest.apiv1 + 'me/pins/?' + query_extention; }else{ request_url=Feed.pinterest.apiv1 + 'boards/' + username + '/pins?' + query_extention; } break; default: } Utility.request(request_url, Feed.pinterest.utility.getPosts); }, utility: { getPosts: function(json){ json.data.forEach(function(element){ var post=new SocialFeedPost('pinterest', Feed.pinterest.utility.unifyPostData(element)); post.render(); }); }, unifyPostData: function(element){ var post={}; post.id=element.id; post.dt_create=moment(element.created_at); post.author_link=element.creator.url; post.author_picture=element.creator.image['60x60' ].url; post.author_name=element.creator.first_name + element.creator.last_name; post.message=element.note; post.description=''; post.social_network='pinterest'; post.link=element.link ? element.link:'https://www.pinterest.com/pin/' + element.id; if(options.show_media){ post.attachment=''; } return post; }} }, rss:{ posts: [], loaded: false, api:'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0', getData: function(url){ var limit='&num='+ options.rss.limit, request_url=Feed.rss.api + limit + '&q=' + encodeURIComponent(url); Utility.request(request_url, Feed.rss.utility.getPosts); }, utility: { getPosts: function(json){ $.each(json.responseData.feed.entries, function(index, element){ var post=new SocialFeedPost('rss', Feed.rss.utility.unifyPostData(index, element)); post.render(); }); }, unifyPostData: function(index, element){ var post={}; post.id=index; post.dt_create=moment(element.publishedDate, 'ddd, DD MMM YYYY HH:mm:ss ZZ', 'en'); post.author_link=''; post.author_picture=''; post.author_name=element.author; post.message=Utility.stripHTML(element.title); post.description=Utility.stripHTML(element.content); post.social_network='rss'; post.link=element.link; if(options.show_media&&element.mediaGroups){ post.attachment=''; } return post; }} }}; return this.each(function(){ Feed.init(); if(options.update_period){ setInterval(function(){ return Feed.init(); }, options.update_period); }}) };})(jQuery);